diff options
| author | real-zephex <[email protected]> | 2024-04-02 22:41:19 +0530 |
|---|---|---|
| committer | real-zephex <[email protected]> | 2024-04-02 22:41:19 +0530 |
| commit | 794cb6236fa256f8074c56f372eba05526e7c066 (patch) | |
| tree | 4d53c0977894bc2939e430e930fd9f6dda6ec0e5 /src/app/anime/[id]/[...animeId]/page.jsx | |
| parent | fixes: minor css modifications, added basic information about the last read m... (diff) | |
| download | dramalama-794cb6236fa256f8074c56f372eba05526e7c066.tar.xz dramalama-794cb6236fa256f8074c56f372eba05526e7c066.zip | |
UI Upgrades for anime section.
Diffstat (limited to 'src/app/anime/[id]/[...animeId]/page.jsx')
| -rw-r--r-- | src/app/anime/[id]/[...animeId]/page.jsx | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/app/anime/[id]/[...animeId]/page.jsx b/src/app/anime/[id]/[...animeId]/page.jsx new file mode 100644 index 0000000..966f212 --- /dev/null +++ b/src/app/anime/[id]/[...animeId]/page.jsx @@ -0,0 +1,81 @@ +import { MediaPlayer, MediaProvider } from "@vidstack/react"; +import "@vidstack/react/player/styles/base.css"; +import "@vidstack/react/player/styles/plyr/theme.css"; +import { + PlyrLayout, + plyrLayoutIcons, +} from "@vidstack/react/player/layouts/plyr"; +import styles from "./video.module.css"; +import { redirect } from "next/navigation"; +import Link from "next/link"; + +export default async function Video({ params }) { + const id = params.animeId[0]; + const series = params.animeId[1]; + + // Getting the episode number and the anime name. Kindly ignore! + const words = id.split("-"); + const last_two = words.slice(-2).join(" "); + const remainingWords = words.slice(0, -2).join(" "); + + const data = await getVideoLink(id); + const animedata = await getAnimeInfo(series); + + if (data.message) { + redirect("/404"); + } + + const link = data.sources[4].url; + + return ( + <div className={styles.VideoMain}> + <div className={styles.VideoContainer}> + <p style={{ textAlign: "center", color: "white" }}> + {last_two} - {remainingWords} + </p> + <div className={styles.Video}> + <MediaPlayer + title={words} + src={link} + playsInline + aspectRatio="16/9" + load="eager" + className={styles.VideoPlayer} + > + <MediaProvider /> + <PlyrLayout icons={plyrLayoutIcons} /> + </MediaPlayer> + <div className={styles.EpisodesButtons}> + {animedata && + animedata.episodes.map((item, index) => ( + // <p key={index}>Hello World</p> + <Link + href={`/anime/watch/${item.id}/${series}`} + key={index} + > + <button>{item.number}</button> + </Link> + ))} + </div> + </div> + </div> + </div> + ); +} + +async function getVideoLink(id) { + const res = await fetch( + "https://consumet-api-di2e.onrender.com/anime/gogoanime/watch/" + id + ); + const data = res.json(); + return data; +} + +async function getAnimeInfo(anime_id) { + const res = await fetch( + "https://anime-sensei-api.vercel.app/anime/gogoanime/info/" + anime_id, + { next: { revalidate: 7200 } } + ); + const data = await res.json(); + return data; +} |